@echo off
setlocal enabledelayedexpansion

:: 定义下载链接
set VBox_url=https://download.virtualbox.org/virtualbox/7.1.2/VirtualBox-7.1.2-164945-Win.exe
set Ubuntu_iso_url=https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/ubuntu-20.04.6-live-server-amd64.iso
:: set Ubuntu_iso_url=https://mirrors.aliyun.com/ubuntu-releases/20.04.6/ubuntu-20.04.6-live-server-amd64.iso
set Autoinstall_iso_url=https://gitee.com/ethanzhu/one-click-install-script/raw/master/ubuntu/autoinstall.iso
set FinalShell_url=https://dl.hostbuf.com/finalshell3/finalshell_windows_x64.exe
set VBoxPath=C:\Program Files\Oracle\VirtualBox\
set VBoxManage=%VBoxPath%\VBoxManage.exe

echo.
echo ============= Ubuntu20.04无人值守安装脚本 by 搞机玩家 =============
echo 注意: 
echo 1. 请将VirtualBox默认安装到: %VBoxPath%
echo 2. 请将相关文件保存到当前脚本路径：%~dp0
echo 3. 安装完成后请将虚拟机网络设置为桥接
echo 4. 默认用户名：ubuntu，密码：123456
echo =====================================
echo.


:: 检查VBoxManage是否存在
if not exist "%VBoxManage%" (
    echo VirtualBox未安装，正在下载安装包...
    powershell -Command "(New-Object System.Net.WebClient).DownloadFile('!VBox_url!', 'VirtualBox-Installer.exe')"
    echo 正在安装VirtualBox，请使用默认路径安装...
    start /wait VirtualBox-Installer.exe
    @REM del VirtualBox-Installer.exe
    echo VirtualBox安装完成！
    
    :: 安装后再次检查
    if not exist "%VBoxManage%" (
        echo 检测到VirtualBox未正确安装，请手动安装到 %VBoxPath%。
        pause
    )
)

:: 检查并下载Ubuntu ISO
if not exist "ubuntu-20.04.6-live-server-amd64.iso" (
    echo 准备打开浏览器下载 Ubuntu ISO,请将iso文件保存到 %~dp0...
    pause
    start "" "!Ubuntu_iso_url!"
    echo Ubuntu ISO 下载链接已打开，请手动下载。

    @REM echo 正在下载Ubuntu 20.04.6 ISO...
    @REM powershell -Command "(New-Object System.Net.WebClient).DownloadFile('!Ubuntu_iso_url!', 'ubuntu-20.04.6-live-server-amd64.iso')"
    @REM echo Ubuntu ISO下载完成！
)

:: 检查并下载autoinstall.iso
if not exist "autoinstall.iso" (
    echo 正在下载autoinstall.iso...
    powershell -Command "(New-Object System.Net.WebClient).DownloadFile('!Autoinstall_iso_url!', 'autoinstall.iso')"
    echo autoinstall.iso下载完成！
)

:: 检查并下载FinalShell
if not exist "finalshell_windows_x64.exe" (
    echo 正在下载finalshell_windows_x64.exe...
    powershell -Command "(New-Object System.Net.WebClient).DownloadFile('!FinalShell_url!', 'finalshell_windows_x64.exe')"
    echo finalshell_windows_x64.exe下载完成！
    echo 正在安装finalshell...
    start /wait finalshell_windows_x64.exe
)

:: 等待用户完成下载
echo.
:: 判断文件是否存在，不存在则持续提示
:check_files
if not exist "ubuntu-20.04.6-live-server-amd64.iso" (
    echo %~dp0\ubuntu-20.04.6-live-server-amd64.iso 文件不存在，请下载并保存到 %~dp0，完成后继续。
    pause
    goto :check_files
)
if not exist "autoinstall.iso" (
    echo %~dp0\autoinstall.iso 文件不存在，请下载完成后继续。
    pause
    goto :check_files
)
pause

:: 交互式输入配置
set /p vm_name="请输入虚拟机名称（默认: UbuntuServer20）: "
if "!vm_name!"=="" set vm_name=UbuntuServer20

set /p cpu_count="请输入CPU核心数（默认: 4）: "
if "!cpu_count!"=="" set cpu_count=4

set /p memory_gb="请输入内存大小(GB)（默认: 4）: "
if "!memory_gb!"=="" set memory_gb=4
set /a memory_mb=!memory_gb! * 1024

set /p disk_gb="请输入硬盘大小(GB)（默认: 100）: "
if "!disk_gb!"=="" set disk_gb=100
set /a disk_mb=!disk_gb! * 1024

:: 显示配置摘要
echo.
echo ============= 虚拟机配置 =============
echo 名称      : !vm_name!
echo CPU核心数 : !cpu_count!
echo 内存(GB)  : !memory_gb!
echo 硬盘(GB)  : !disk_gb!
echo =====================================
echo.

set /p confirm="确认创建虚拟机吗？(Y/N, 默认: Y): "
if /i "!confirm!"=="N" (
    echo 已取消操作。
    pause
    exit /b
)

:: 创建虚拟机
echo 正在创建虚拟机...
"%VBoxManage%" createvm --name "!vm_name!" --ostype "Ubuntu_64" --register
"%VBoxManage%" modifyvm "!vm_name!" --memory !memory_mb! --cpus !cpu_count! --ioapic on --graphicscontroller vboxsvga --accelerate3d off --audio none --usb off
"%VBoxManage%" createhd --filename "!vm_name!.vdi" --size !disk_mb! --format VDI

:: 配置存储
"%VBoxManage%" storagectl "!vm_name!" --name "SATA" --add sata --controller IntelAhci
"%VBoxManage%" storageattach "!vm_name!" --storagectl "SATA" --port 0 --type hdd --medium "!vm_name!.vdi"

"%VBoxManage%" storagectl "!vm_name!" --name "IDE" --add ide
"%VBoxManage%" storageattach "!vm_name!" --storagectl "IDE" --port 0 --device 0 --type dvddrive --medium "ubuntu-20.04.6-live-server-amd64.iso"
"%VBoxManage%" storageattach "!vm_name!" --storagectl "IDE" --port 1 --device 0 --type dvddrive --medium "autoinstall.iso"

:: 配置网络
"%VBoxManage%" modifyvm "!vm_name!" --nic1 nat

:: 启动虚拟机
echo 正在启动虚拟机...
"%VBoxManage%" startvm "!vm_name!" --type headless

echo 虚拟机 [!vm_name!] 已创建并启动！
echo 安装完成后会自动重启，请稍候...
pause
echo 安装完成后请将虚拟机网络设置为桥接...
pause
echo 默认用户名：ubuntu，密码：123456，使用ip address查看ip，使用FinalShell进行ssh连接
pause